/**
* @Title: TimeSeverHandler.java
* @Package com.an.timeserver
* @Description: TODO(用一句话描述该文件做什么)
* @author antch,861710865@qq.com
* @date 2017年7月20日 下午2:00:50
* @version V1.0
*/


package com.an.timeserver;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;

/**
* @ClassName: TimeSeverHandler
* @Description: TODO(时间服务器)
* @author antch,861710865@qq.com
* @date 2017年7月20日 下午2:00:50
*
*/

public class TimeSeverHandler extends ChannelInboundHandlerAdapter {

	/*
	 * (非 Javadoc)
	* <p>Title: channelActive</p>
	* <p>Description:此方法将会在连接被建立并且准备进行通信时被调用 </p>
	* @param ctx
	* @throws Exception
	* @see io.netty.channel.ChannelInboundHandlerAdapter#channelActive(io.netty.channel.ChannelHandlerContext)
	 */
	@Override
	public void channelActive(ChannelHandlerContext ctx) throws Exception {

		System.out.println("时间处理");

		// TODO Auto-generated method stub
		//分配缓冲，32位整数需要4个字节。ctx.alloc()调用，然后分配一个新的缓冲
		final ByteBuf time = ctx.alloc().buffer(4);
		int times = (int)(System.currentTimeMillis() / 1000L + 2208988800L);
		System.out.println("返回的时间整数：" + times);
		time.writeInt(times);

		//ChannelFuture此对象代表了一个还没有发生的I/O操作
		final ChannelFuture f = ctx.writeAndFlush(time);

		//在ChannelFuture完成调用后，调用close方法。写方法完成会通知监听者。
		f.addListener(new ChannelFutureListener() {

			@Override
			public void operationComplete(ChannelFuture arg0) throws Exception {
				// TODO Auto-generated method stub
				assert f == arg0;
				ctx.close();
			}
		});
	}

	@Override
	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
		cause.printStackTrace();
		ctx.close();
	}
}
